/**
* Control de Mantenimiento de Habitaciones
*
* @author Weyler Antonio Uicab Pat (intel1981@gmail.com)
* @version Version 1.0
*
*/
/**
* Archivo JavaScript para agregar una nueva habitacion
*
* @version 1.0
* @author Weyler Antonio Uicab Pat (intel1981@gmail.com)
*
* Creado el : 20/Noviembre/2011
* Actualizado el: 20/Noviembre/2011
*/
/** Las clases se encuentran en {root}/extjs4/src/ */


Ext.require(['*']);
Ext.ns('Sistema.FrontEnd');
Ext.Loader.setConfig({enabled:true});


Ext.define('modelUsuarios', {
	extend: 'Ext.data.Model',
	proxy : {
		type : 'ajax',
		//actionMethods : 'POST',
		//url : '/roles', //application/controllers/Habitacion.php
		
		api: {
                read: '/usuarios/view',
                create: '/usuarios/create',
                save: '/usuarios/update',
                destroy: '/usuarios/destroy'
		},
	
		reader: {
				
                type: 'json',
                successProperty: 'success',
                root: 'usuarios',
                messageProperty: 'message'
            },
		writer: {
			type: 'json',
			writeAllFields: false,
			root: 'usuario'
		},
		
		
		
		/*reader: {		
			type : 'json',
			idProperty : 'idRol',
			root : 'roles',
			totalProperty : 'totalRoles'
		}*/
	},
	
	fields: [
		{type: 'int' , name: 'idUsuario'},
		{type: 'string', name: 'username'},
		{type: 'string', name: 'nombre'},
		/*{type: 'int' , name: 'idDescripHabit'},*/
		{type: 'string', name: 'password'}
			]
});


Ext.define('modelPermisos', {
	extend: 'Ext.data.Model',
	proxy : {
		type : 'ajax',
		//actionMethods : 'GET',
		url : '/permisos/view', //application/controllers/Habitacion.php
		
		api: {
                read: '/permisos/view',
                create: '/permisos/create',
                save: '/permisos/update',
                destroy: '/permisos/destroy'
		},
		
		reader: {
			//actionMethods : 'GET',
			type : 'json',
			idProperty : 'idPermiso',
			root : 'permisos',
			totalProperty : 'totalPermisos'
		}
	},
	fields: [
		{type: 'int' , name: 'idPermiso'},
		{type: 'string', name: 'nombrePermiso'}
	]
}); 






Sistema.FrontEnd.AdmUsuarios = { //Begin Main Class
	inicio : function(){ //Begin function inicio
		
		
		//Ext.Msg.alert('Estoy en Inicio');
	
		Ext.QuickTips.init();
		var registroSeleccionado;
		//Creacion del Store para el DataGrid de las habitaciones
		this.StoreUsuarios = Ext.create('Ext.data.Store', {
			model : 'modelUsuarios',
			autoLoad : true
		});
		
		
		//DataStore para el ComboBox de la lista de Permisos
		/*this.dsCmbPermisos = Ext.create('Ext.data.Store', {
			model : 'modelPermisos',
			autoLoad : true
		});*/ 
		
		
		
		//ComboBox para mostrar permisos disponibles
		/*this.cmbPermisos = Ext.create('Ext.form.ComboBox''Ext.ux.form.field.BoxSelect', {
			
			store : this.dsCmbPermisos,
			fieldLabel : 'Permisos',
			queryMode : 'local',
			name : 'cmb_permisos',
			id : 'id_cmb_permisos',
			displayField : 'nombrePermiso',
			valueField : 'idPermiso',
			allowBlank : false,
			editable : false,
			multiSelect :true,
			fieldStyle : 'font-size:11px;',
			width : 300,
			height: 70,
			
			//labelWidth: 130,
			
			listeners: {
				scope : this,
				'select': function(combo, selection){
					//Activamos el ComboBox de las subcategorias
					//Ext.getCmp('id_cmbx_subcateg_manto').setDisabled(false);
				}
			}
			
			
			fieldLabel: 'Permisos',
			name : 'cmb_permisos',
			id: 'id_cmbx_permisos',
			displayField: 'nombrePermiso',
			width: 500,
			height: 70,
			//labelWidth: 130,
			store: this.dsCmbPermisos,
			queryMode: 'local',
			emptyText: 'Seleccione los Permisos a hacer asignados',
			valueField: 'idPermiso',
			multiSelect :true,
			allowBlank : false
			
			//value: 'WA'
			
			
			
		});*/ 
		
		
		
		
		//Formulario para el ingreso de datos
		/*this.frmDatosRol = Ext.create('Ext.form.Panel', {
			frame :true,
			title : 'Datos del Rol',
			bodyStyle :'padding:5px 5px 0',
			width : 550,
		fieldDefaults: {
			msgTarget : 'side',
			labelWidth : 120,
			labelStyle : 'font-size:11px;',
			fieldStyle : 'font-size:11px;'
		},
		defaultType: 'textfield',
		items: [{
			fieldLabel : 'Nombre del Rol',
			id : 'id_txt_nombre_rol',
			name : 'txt_txt_nombre_rol',
			anchor : '50%',
			allowBlank : false
		},{
			fieldLabel : 'Descripción del Rol',
			id : 'id_txt_descrip_rol',
			name : 'txt_descrip_rol',
			anchor : '80%',
			allowBlank : false
		}],
		buttons: [{
			text : 'Nuevo',
			id : 'id_btn_nuevo',
			iconCls : 'icon_button_add',
			handler : this.EnabledButtonsFrm
		},{
			text : 'Guardar',
			id : 'id_btn_guardar',
			iconCls : 'icon_button_save',
			scope : this,
			handler : this.SaveRecord
		},{
			text : 'Cancelar',
			id : 'id_btn_cancelar',
			iconCls : 'icon_button_cancel',
			handler : this.ButtonCancelForm
		}]
	});*/
	//Agregamos el formulario this.frmDatosHabitacion
	/*this.PanelDatosRol = Ext.create('Ext.panel.Panel',{
		border : false,
		bodyPadding : '10 10 10 10',
		items : [this.frmDatosRol]
	});*/
	/** Barra de iconos para el DataGridView de las Habitaciones */
	this.TblGridUsuarios = Ext.create('Ext.toolbar.Toolbar',{
		items : [
			{
				xtype : 'button',
				id : 'btn_grid_agregar',
				itemId : 'btn_grid_agregar',
				text : 'Agregar Usuario',
				iconCls : 'icon_button_add',
				disabled : false,
				tooltip : 'Agregar un Nuevo Usuario',
				scope : this,
				handler : this.AgregarRecordSelect
			},
			{
				xtype : 'tbseparator'
			},{
				xtype : 'button',
				id : 'btn_grid_editar',
				itemId : 'btn_grid_editar',
				text : 'Editar Registro',
				iconCls : 'icon_btn_grid_editar',
				disabled : true,
				tooltip : 'Editar el registro seleccionado',
				scope : this,
				handler : this.EditRecordSelect
			},{
				xtype : 'tbseparator'
				},{
				xtype : 'button',
				id : 'btn_grid_eliminar',
				itemId : 'btn_grid_eliminar',
				text : 'Eliminar Registro',
				iconCls : 'icon_btn_grid_eliminar',
				disabled : true,
				tooltip : 'Eliminar el registro seleccionado',
				scope : this,
				handler : this.DeleteRecordSelect
			},{
				xtype : 'tbseparator'
			}
		]
	});
	this.GridUsuarios = Ext.create('Ext.grid.Panel',{
		title : 'Lista de Usuarios',
		frame : true,
		store : this.StoreUsuarios,
		stripeRows : true,
		columnLines: true,
		loadMask : true,
		width : 550,
		height : 400,
		dockedItems : [this.TblGridUsuarios],
		columns : [
			Ext.create('Ext.grid.RowNumberer'),
			{
				text : "idUsuario",
				dataIndex : 'idUsuario',
				hidden : true
			},
			{ text : "Usuario",
				dataIndex : "nombre",
				sortable : false,
				resizable : false,
				width : 200
			},
			{
				text : "Username",
				dataIndex : "username",
				sortable : false,
				resizable : false,
				width : 290
			}
		],
		listeners : {
			scope : this, //El ámbito de aplicación (la referencia) en el que se ejecuta el controlador.
			'selectionchange': function(view, records) {
			//Activar los botones del DataGrid
			//La propiedad #btn_grid_editar corresponde al itemId asignado al item en el componente Toolbar del DataGrid
			this.GridUsuarios.down('#btn_grid_editar').setDisabled(!records.length);
			this.GridUsuarios.down('#btn_grid_eliminar').setDisabled(!records.length);
		}
	},
	bbar: Ext.create('Ext.PagingToolbar', {
		store : this.StoreUsuarios,
		displayInfo : true,
		displayMsg : 'Mostrando registros {0} - {1} de {2}',
		emptyMsg : "Sin registros para mostrar"
	})
	});
	//Agregamos el DataGrid this.GridHabitaciones
	this.PanelGridUsuarios = Ext.create('Ext.panel.Panel',{
		border : false,
		bodyPadding : '5 10 10 10',
		items : [this.GridUsuarios]
	});
	//Ventana del modulo actual
	this.WindowAdmUsuarios = Ext.create('Ext.window.Window',{
		title : 'Administración de Usuarios',
		id : 'id_WindowWindowAdmUsuarios',
		iconCls : 'icon_window_application',
		region : 'center',
		width : 583,
		height : 450,
		//layout : 'fit',
		resizable : true,
		draggable : false,
		closable : true,
		closeAction :'hide',
		items : [/*this.PanelDatosRol,*/this.PanelGridUsuarios]
	});
	this.WindowAdmUsuarios.show()
	//this.DisabledButtonsFrm();
}, //End function inicio
	//Funcion para guardar los datos del formulario
	/*SaveRecord : function(){
		this.WindowWindowAdmRoles.el.mask('Guardando datos....Espere por favor...');
		if (this.frmDatosRol.getForm().isValid()) {
			this.frmDatosRol.getForm().submit({
			method : 'POST',
			url : '/roles', //application/controllers/Habitacion.php
			clientValidation : true,
			scope : this,
			success: function(form, action){
				this.StoreHabitaciones.load();
				this.frmDatosHabitacion.getForm().reset();
				//Botones del formulario
				Ext.getCmp('id_btn_nuevo').setDisabled(false);
				Ext.getCmp('id_btn_guardar').setDisabled(true);
				Ext.getCmp('id_btn_cancelar').setDisabled(true);
				//Cuadros de texto del formulario
				Ext.getCmp('id_txt_num_habitacion').setDisabled(true);
				Ext.getCmp('id_txt_tipo_habitacion').setDisabled(true);
				this.WindowAdmRoles.el.unmask();
			},
			failure: function(form, action){
				this.WindowAdmRoles.el.unmask();
				Ext.MessageBox.show({
					title : 'Informacion del sistema',
					msg : action.result.msg,
					buttons : Ext.MessageBox.OK,
					icon : Ext.MessageBox.ERROR,
					width : 350
				});
			} //End failure
		});
		}else{
			this.WindowAdmRoles.el.unmask();
			Ext.MessageBox.show({
				title : 'Informacion del sistema',
				msg : 'Los campos marcados son obligatorios. Verifique el formulario.',
				buttons : Ext.MessageBox.OK,
				icon : Ext.MessageBox.ERROR,
				width : 350
			});
		}
	},*/
	
	
	AgregarRecordSelect : function(){
	
		//Creamos el FormPanel que contendra los datos a agregar
		this.FormAddModal = Ext.create('Ext.form.Panel',{
		frame :true,
		title : 'Datos del Usuario',
		bodyStyle :'padding:5px 5px 0',
		width : 550,
		height : 250,
		defaultType: 'textfield',
		items: [/*{
			//fieldLabel : 'Id Habitacion',
			id : 'idRolAdd',
			name : 'idRolAdd',
			anchor : '50%',
			hidden : true,
			allowBlank : false
			},*/{
			fieldLabel : 'Nombre',
			id : 'nombreAdd',
			name : 'nombreAdd',
			anchor : '80%',
			allowBlank : false
			},{
			fieldLabel : 'Username',
			id : 'usernameAdd',
			name : 'usernameAdd',
			anchor : '80%',
			hidden : false,
			allowBlank : false
		},{
			fieldLabel : 'Contraseña',
			id : 'passwordAdd',
			name : 'passwordAdd',
			anchor : '80%',
			hidden : false,
			inputType:'password',
			allowBlank : false
		}/*, {
			xtype : 'fieldcontainer',
			labelStyle : 'font-weight:bold;padding:0',
			items: [
				this.cmbPermisos,
			]
		}*/],
		buttons: [{
			text : 'Guardar',
			id : 'id_btn_add_guardar',
			iconCls : 'icon_button_save',
			scope : this,
			handler : this.HandlerGuardarDatosUsuario
			},{
			text : 'Cancelar',
			id : 'id_btn_add_cancelar',
			iconCls : 'icon_button_cancel',
			scope : this,
			handler : function(){
				this.WindowFormAddModal.close();
			}
		}]
	});
		//Una vez creado el FormPanel lo reseteamos
		this.FormAddModal.getForm().reset();
		//Creamos la ventana que contendra el FormaPanel creado anteriormente
		this.WindowFormAddModal = Ext.create('Ext.window.Window',{
			title : 'Agregar Nuevo Usuario',
			bodyStyle : 'padding:10px 10px 10px 10px',
			region : 'center',
			width : 580,
			height : 300,
			modal : true,
			//resizable : false,
			draggable : false,
			closable : true,
			closeAction : 'hide',
			items : [this.FormAddModal]
		});
		//Mostramos la ventana con el formulario de edicion y los datos del registro seleccionado
		this.WindowFormAddModal.show();
		
	},
	
	
	
	//Funcion para mostrar la ventana con el formulario de edicion
	//El formulario de edicion contiene los datos del registro seleccionado para su edicion
	EditRecordSelect : function(){
		//Creamos el FormPanel que contendra los datos a editar
		this.FormEditModal = Ext.create('Ext.form.Panel',{
		frame :true,
		title : 'Datos del Usuario',
		bodyStyle :'padding:5px 5px 0',
		width : 550,
		height : 250,
		defaultType: 'textfield',
		items: [{
			//fieldLabel : 'Id Habitacion',
			id : 'idUsuario',
			name : 'idUsuario',
			anchor : '50%',
			hidden : true,
			allowBlank : false
			},{
			fieldLabel : 'Nombre del Usuario',
			id : 'nombreUsuario',
			name : 'nombreUsuario',
			anchor : '80%',
			allowBlank : false
			},{
			fieldLabel : 'Contraseña',
			id : 'passwordUsuario',
			name : 'passwordUsuario',
			anchor : '80%',
			hidden : false,
			inputType:'password',
			allowBlank : false
		}/*, {
			xtype : 'fieldcontainer',
			labelStyle : 'font-weight:bold;padding:0',
			items:	[
				this.cmbPermisos,
					]
		}*/],
		buttons: [{
			text : 'Guardar',
			id : 'id_btn_editar_guardar',
			iconCls : 'icon_button_save',
			scope : this,
			handler : this.HandlerActualizarDatosUsuario
			},{
			text : 'Cancelar',
			id : 'id_btn_editar_cancelar',
			iconCls : 'icon_button_cancel',
			scope : this,
			handler : function(){
			this.WindowFormEditModal.close();
			}
		}]
	});
	//Una vez creado el FormPanel lo reseteamos
	this.FormEditModal.getForm().reset();
	//Obtenemos el registro seleccionado del Grid
	registroSeleccionado = this.GridUsuarios.getSelectionModel().getSelection()[0].data.idUsuario;
	
	//setamos los valores del grit a ser editados
	Ext.getCmp('idUsuario').setValue(this.GridUsuarios.getSelectionModel().getSelection()[0].data.idUsuario);
	Ext.getCmp('nombreUsuario').setValue(this.GridUsuarios.getSelectionModel().getSelection()[0].data.nombre),
	Ext.getCmp('passwordUsuario').setValue(this.GridUsuarios.getSelectionModel().getSelection()[0].data.password),
	
	
	//Creamos la ventana que contendra el FormaPanel creado anteriormente
	this.WindowFormEditModal = Ext.create('Ext.window.Window',{
		title : 'Editar registro seleccionado',
		bodyStyle : 'padding:10px 10px 10px 10px',
		region : 'center',
		width : 580,
		height : 300,
		modal : true,
		//resizable : false,
		draggable : false,
		closable : true,
		closeAction : 'hide',
		items : [this.FormEditModal]
	});
	//Mostramos la ventana con el formulario de edicion y los datos del registro seleccionado
	this.WindowFormEditModal.show();
},
	
	HandlerGuardarDatosUsuario:function(){
		Ext.Msg.alert("Info",this.FormAddModal.getForm().isValid());
		if (this.FormAddModal.getForm().isValid()){
			//Ext.Msg.alert("Info","Pasé la validación");
			
			var rec = new modelUsuarios({
				//idRol: Ext.getCmp('idRolAdd').getValue(),
				nombre: Ext.getCmp('nombreAdd').getValue(),
				username: Ext.getCmp('usernameAdd').getValue(),
				password: Ext.getCmp('passwordAdd').getValue()
			});
			
			
			this.FormAddModal.getForm().submit({
				method : 'POST',
				//type: "json",
				url : '/usuarios/create', 
				clientValidation : true,
				scope : this,
				params : {
					//ids_permisos : Ext.JSON.encode(Ext.getCmp('id_cmbx_permisos').getValue()),
					usuario : Ext.JSON.encode(rec)
				},
				success: function(form, action){
					this.WindowFormAddModal.close();
					this.StoreUsuarios.load();
				},
				failure: function(form, action){
					Ext.Msg.alert("Error",action.result);
					Ext.MessageBox.show({
						title : 'Informacion del sistema',
						msg : action.result.msg,
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 350
					});
				} //End failure
			});
		}
	},
	
	

	
	HandlerActualizarDatosUsuario:function(){
		if (this.FormEditModal.getForm().isValid()){
			//Ext.Msg.alert("Info","Actualizar los datos del formulario");
			
			var rec = new modelUsuarios({
				id: Ext.getCmp('idUsuario').getValue(),
				nombre: Ext.getCmp('nombreUsuario').getValue(),
				password: Ext.getCmp('passwordUsuario').getValue()
			});
			
			//rec.create();
			
			//this.StoreRoles.insert(0, rec);
			//this.StoreRoles.load();
			
			this.FormEditModal.getForm().submit({
				method : 'POST',
				//type: "json",
				url : '/usuarios/update', //application/controllers/Habitacion.php
				clientValidation : true,
				scope : this,
				params : {
					usuario : Ext.JSON.encode(rec)
					/*idRol : Ext.getCmp('idRol').getValue(),
					nombreRol : Ext.getCmp('nombreRol').getValue(),
					descripRol : Ext.getCmp('descripRol').getValue(),
					//param_descripHabitacion : Ext.getCmp('descripHabitacion').getValue()*/
				},
				success: function(form, action){
					this.WindowFormEditModal.close();
					this.StoreUsuarios.load();
				},
				failure: function(form, action){
					Ext.MessageBox.show({
						title : 'Informacion del sistema',
						msg : action.result.msg,
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 350
					});
				} //End failure
			});
		}
	},
	
	DeleteRecordSelect : function(){
		Ext.MessageBox.show({
			title : "Información del sistema",
			msg : "¿Realmente desea eliminar el registro seleccionado?",
			buttons : Ext.MessageBox.YESNO,
			icon : Ext.MessageBox.INFO,
			scope : this,
			fn : this.EliminarRegistroSeleccionado,
			width : 400
		});
	},
	EliminarRegistroSeleccionado : function(btn){
		if (btn == 'yes') { //btn=='yes'
			this.WindowAdmUsuarios.el.mask('Eliminando datos....Espere por favor...');
			registroSeleccionado = this.GridUsuarios.getSelectionModel().getSelection()[0].data.idUsuario;
			Ext.Ajax.request({
				url : '/usuarios/destroy', //application/controllers/Habitacion.php
				method : 'POST',
				scope : this,
				params : {
					param_id : registroSeleccionado
				},
				success: function(response, opts) { //success
					var obj = Ext.JSON.decode(response.responseText);
					if(obj.success==true){
						this.StoreUsuarios.load();
						this.WindowAdmUsuarios.el.unmask();
					}
					else if(obj.success==false){
						this.WindowAdmUsuarios.el.unmask();
							Ext.MessageBox.show({
								title : "Informacion del sistema",
								msg : obj.msg,
								buttons : Ext.MessageBox.OK,
								icon : Ext.MessageBox.ERROR,
								width : 400
							});
					}
				else{
					this.WindowAdmUsuarios.el.unmask();
					Ext.MessageBox.show({
						title : "Informacion del sistema",
						msg : "Mensaje de error alternativo a la eliminacion del registro seleccionado",
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.ERROR,
						width : 400
					});
				}
			}, //success
			failure: function(response, opts) { //failure
				this.WindowAdmUsuarios.el.unmask();
				var obj = Ext.JSON.decode(response.responseText);
				Ext.MessageBox.show({
					title : "Informacion del sitema",
					msg : "Error de conexion al servidor de la base de datos",
					buttons : Ext.MessageBox.OK,
					icon : Ext.MessageBox.ERROR,
					width : 400
				});
			} //failure
		});
	}else{
	}
},
	/*
	//Funcion para desactivar los controles y los botones del formulario
	DisabledButtonsFrm : function(){ //Begin function DisabledButtonsFrm
		Ext.getCmp('id_txt_nombre_rol').setDisabled(true);
		Ext.getCmp('id_txt_descrip_rol').setDisabled(true);
		Ext.getCmp('id_btn_guardar').setDisabled(true);
		Ext.getCmp('id_btn_cancelar').setDisabled(true);
	}, //End function DisabledButtonsFrm
	//Function para activar los controles y los botones del formulario
	EnabledButtonsFrm : function(){ //Begin function EnabledButtonsFrm
		Ext.getCmp('id_txt_nombre_rol').setDisabled(false);
		Ext.getCmp('id_txt_descrip_rol').setDisabled(false);
		Ext.getCmp('id_btn_nuevo').setDisabled(true);
		Ext.getCmp('id_btn_guardar').setDisabled(false);
		Ext.getCmp('id_btn_cancelar').setDisabled(false);
	}, //End function EnabledButtonsFrm
	//Funcion para el boton Cancelar del formulario
	ButtonCancelForm : function(){
		//Eliminamos cualquier valor contenido en los TextBoxs
		Ext.getCmp('id_txt_nombre_rol').setValue("");
		Ext.getCmp('id_txt_descrip_rol').setValue("");
		//Limpiar el buffer de errores de los textboxs
		Ext.getCmp('id_txt_nombre_rol').clearInvalid();
		Ext.getCmp('id_txt_descrip_rol').clearInvalid();
		//Desactivar los textbox correspondientes
		Ext.getCmp('id_txt_nombre_rol').setDisabled(true);
		Ext.getCmp('id_txt_descrip_rol').setDisabled(true);
		//Botones del formulario
		Ext.getCmp('id_btn_nuevo').setDisabled(false);
		Ext.getCmp('id_btn_guardar').setDisabled(true);
		Ext.getCmp('id_btn_cancelar').setDisabled(true);
	}*/
} //End Main Class
Ext.onReady(

Sistema.FrontEnd.AdmUsuarios.inicio, Sistema.FrontEnd.AdmUsuarios


);
/** Fin del archivo AgregarHabitacion.js**/
/** Ubicacion: {root}/javascript/ **/ 
